﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lola.Datos.Persistencia
{
    /// <summary>
    /// Ana
    /// </summary>
    public static class pIncidencia
    {
        public static List<Incidencia> buscarIncidenciasPorServicio(string cod)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                var query = from p in contextSeminarioI.Incidencias
                            where p.cod .Equals(cod)
                            select p;
                List<Incidencia> inc = query.ToList();
                return inc;
            }


        }

        /// <summary>
        /// Ana
        /// </summary>
        /// <param name="cod"></param>
        /// <param name="numeroInc"></param>
        /// <param name="fechaInc"></param>
        /// <param name="gravedad"></param>
        /// <param name="descrip"></param>
        /// <param name="prioridad"></param>
        public static void altaDeIncidencia(string cod, DateTime fechaInc, string gravedad, string descrip, int prioridad,string galpon,string sector)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {

                Incidencia inc = new Incidencia();
                inc.cod = cod;
                inc.fechInc = fechaInc;
                inc.gravedad = gravedad;
                inc.descrip = descrip;
                inc.prioridad = prioridad;
                inc.estado = "A";
                inc.idConv=pIncidencia.obtenerNroConvinacionSectorGalpon(galpon,sector);
                inc.numeroInc = pIncidencia.obtenerUltimoNroIncidencia() + 1;
                contextSeminarioI.AddObject("Incidencias", inc);
                contextSeminarioI.SaveChanges();
            }
        }

        private static int obtenerUltimoNroIncidencia()
        {

            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                int? ultimoNro = (from p in contextSeminarioI.Incidencias
                                  select (int?)p.numeroInc).Max();

                if (!ultimoNro.HasValue)
                {
                    return 0;
                }
                else
                {
                    return ultimoNro.Value;
                }
            }
        }
        private static int obtenerNroConvinacionSectorGalpon(string galpon,string nomsector)
        {
             using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                 int nrogal=pGalpon.obtenerIdGalpon(galpon);
                 int nrosector=pSector.obtenerNumeroSector(nomsector);

                 var nroconv = from sg in contextSeminarioI.SectorGalpons
                                  where sg.idGal==nrogal & sg.numSec==nrosector
                                  select  sg.idConv;
                 return (int)  nroconv.FirstOrDefault();

             }
        }

        public static string obtenerNomSectorInc(int idconv)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                var numsect = from sg in contextSeminarioI.SectorGalpons
                              where sg.idConv == idconv
                              select sg.numSec;
                return pSector.obtenerNombreSector((int)numsect.FirstOrDefault());
            }
        }
           
 

        /// <summary>
        /// Ana
        /// </summary>
        /// <param name="numInc"></param>
        public static void bajaDeIncidencia(int numInc)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                var query = from p in contextSeminarioI.Incidencias
                            where p.numeroInc == numInc
                            select p;
                Incidencia incidencia = query.First();
                contextSeminarioI.DeleteObject(incidencia);
                //Actualizo el estado a C: CERRADA
                //incidencia.estado = "C";
                contextSeminarioI.SaveChanges();
            }
        }

        /// <summary>
        /// Ana
        /// </summary>
        /// <param name="cod"></param>
        /// <param name="numeroInc"></param>
        /// <param name="fechaInc"></param>
        /// <param name="gravedad"></param>
        /// <param name="descrip"></param>
        /// <param name="prioridad"></param>
        /// <param name="estado"></param>
        public static void modificarIncidencia(string cod, int numeroInc, DateTime fechaInc, string gravedad, string descrip, int prioridad, string estado)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                var query = from p in contextSeminarioI.Incidencias
                            where p.numeroInc == numeroInc & p.cod.Equals(cod)
                            select p;
                Incidencia incidencia = query.First();
                incidencia.gravedad = gravedad;
                incidencia.prioridad = prioridad;
                incidencia.descrip = descrip;
                incidencia.estado = estado;
                contextSeminarioI.SaveChanges();

            }
        }

    }
}
